#include "ModuleLoadCollec.h"

void ModuleLoadCollec::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	parent->setAutoProcess(false);
	win=new QWidget();
  layout=new QVBoxLayout(win);

	scroll=new QScrollArea();
	collection=NULL;
	layout_collection=NULL;
	
	pb=new QProgressBar(win);
	pb->setFormat(tr("%v / %m"));

	pb_load=new QPushButton ("Charger une collection d'image",win);
	pb_send=new QPushButton ("Envoyer les images en serie",win);
	
	layout->addWidget(pb_load);
	layout->addWidget(pb);	
	layout->addWidget(pb_send);
	layout->addWidget(scroll);

	connect(pb_load,SIGNAL(clicked()),this,SLOT(s_load()));
	connect(pb_send,SIGNAL(clicked()),this,SLOT(s_send()));
}
////////////////////////////////////////////////////////////////////////////////
void ModuleLoadCollec::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleLoadCollec::process()
{

}
////////////////////////////////////////////////////////////////////////////////
void ModuleLoadCollec::setInput(int n,const cv::Mat & m)
{
	s_send();
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleLoadCollec::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleLoadCollec::getName()
{
	return tr("Chargeur de Collections");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleLoadCollec::nbInputs()
{
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleLoadCollec::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleLoadCollec::getParams()
{
	return tr("no_param");
}

////////////////////////////////////////////////////////////////////////////////
QCVModuleInterface * ModuleLoadCollec::clone()
{
	return new ModuleLoadCollec;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleLoadCollec::help(int id)
{
	if(id==-2)
	{
		return tr("Permet de charger une collection d' image");
	}
	else if(id==-1)
	{
		return tr("image");
	}
	else if(id==0)
	{
		return tr("image");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
void ModuleLoadCollec::s_load()
{
	QStringList filenames=QFileDialog::getOpenFileNames(win,"Ouvrir des images","data",tr("*.jpg *.png *.bmp"));

	if(filenames.size()>0)
	{	
		if(collection!=NULL)
		{
			delete collection;
		}
		collection=new QWidget(win);
		layout_collection=new QGridLayout(collection);
		scroll->setWidget(collection);
	}

	images.clear();

	collection->setFixedSize(0,0);
	pb->setRange(0,filenames.size());
	pb->setValue(0);
	for(int i=0;i<filenames.size();i++)
	{
		cv::Mat newImage;
		newImage=cv::imread(filenames[i].toAscii().data());
		cv::cvtColor(newImage,newImage,CV_BGR2RGB);
	
		QLabel * newLabel_res=new QLabel(QString::number(newImage.cols)+tr("x")+QString::number(newImage.rows),collection);
		images+=newImage;

		cv::resize(newImage,newImage,cv::Size(),150.0/newImage.rows,150.0/newImage.rows);		

		QLabel * newLabel=new QLabel(collection);
		QImage tmp((uchar *)newImage.data, newImage.cols, newImage.rows, newImage.step, QImage::Format_RGB888);
		newLabel->setPixmap(QPixmap::fromImage(tmp));
		newLabel->setFixedSize(newImage.cols,newImage.rows);
				
		QFileInfo info(filenames[i]);
		QLabel * newLabel_filename=new QLabel(info.fileName());
		QLabel * newLabel_num=new QLabel(tr("id=")+QString::number(i));

		

		layout_collection->addWidget(newLabel,0,i);
		layout_collection->addWidget(newLabel_num,1,i);	
		layout_collection->addWidget(newLabel_res,2,i);	
		layout_collection->addWidget(newLabel_filename,3,i);	

		collection->setFixedSize(collection->width()+10+newImage.cols,
														 100+newImage.rows);
		pb->setValue(i+1);
	}
	collection->update();
}

////////////////////////////////////////////////////////////////////////////////
void ModuleLoadCollec::s_send()
{
	pb->setRange(0,images.size());
	pb->setValue(0);
	for(int i=0;i<images.size();i++)
	{
		parent->forceOutput(images[i]);
		
		pb->setValue(i+1);
		win->update();
	}	
}

////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleLoadCollec_plugin,ModuleLoadCollec);  
